package com.dlc.shop.wukongim.service;

import com.dlc.shop.bean.dto.wukong.*;
import com.dlc.shop.bean.model.ImChannel;
import com.dlc.shop.bean.vo.wukong.ConversationSyncVO;
import com.dlc.shop.bean.vo.wukong.MessageSyncVO;

import java.util.List;

/**
 * @author TRACK
 */
public interface WuKongImService {

    /**
     * 管理员登录或注册
     * @param registerOrLoginDTO
     * @return
     */
    void registerOrLogin(RegisterOrLoginDTO registerOrLoginDTO);

    /**
     * 根据管理员id列表获取在线的管理员id列表
     * @param employeeIds
     * @param shopId
     * @return
     */
    List<Long> listOnlineManagerIds(List<Long> employeeIds, Long shopId);

    /**
     * 获取用户在线情况
     * @param uid
     * @return
     */
    Boolean getUserOnline(String uid);

    /**
     * 向一个已存在的频道内添加订阅者
     * @param channelId
     * @param uid
     */
    void addSubscriber(String channelId, String uid);

    /**
     * 向一个已存在的频道内移除订阅者
     * @param channelId
     * @param uid
     */
    void removeSubscriber(String channelId, String uid);

    /**
     * 发送转接客服消息
     * @param channelId
     * @param nickName
     * @param uid
     */
    void sendTransferMessage(String channelId, String nickName, String uid);

    /**
     * 发送已读cmd消息
     * @param channelId
     * @param maxSeq
     * @param userType
     */
    void sendReadMessage(String channelId, Long maxSeq, Integer userType);

    /**
     * 发送自动回复消息
     * @param channelId
     * @param content
     * @param uid
     */
    void sendAutoReplyMessage(String channelId, String content, String uid);

    /**
     * 发送直播间状态改变消息、商品状态异常cmd消息
     * @param channelId
     * @param content
     * @param uid 发给指定用户 为空则发给所有订阅者
     */
    void sendLiveRoomMessage(String channelId,  String content, String uid);

    /**
     * 更新或创建频道
     * @param channelDTO
     */
    void createChannel(ChannelDTO channelDTO);

    /**
     * 删除频道
     * @param channeDeleteDTO
     */
    void deleteChannel(ChanneDeleteDTO channeDeleteDTO);

    /**
     * 获取用户最近会话列表
     * @param conversationSyncDTO
     * @return
     */
    List<ConversationSyncVO> conversationSync(ConversationSyncDTO conversationSyncDTO);

    /**
     * 标为已读
     * @param setUnreadDTO
     */
    void setUnread(SetUnreadDTO setUnreadDTO);

    /**
     * 将用户提出设备
     * @param registerOrLoginDTO
     */
    void deviceQuit(RegisterOrLoginDTO registerOrLoginDTO);

    /**
     * 获取某个频道的消息列表
     * @param messageSyncDTO
     * @return
     */
    MessageSyncVO messageSync(MessageSyncDTO messageSyncDTO);

    /**
     * 批量发送在线状态消息
     * @param payload
     * @param channelIds
     * @param cmd
     */
    void messageSendbatch(String payload, List<String> channelIds, String cmd);

    /**
     * 批量发送用户注销消息
     * @param userId
     * @param uids
     * @param imChannels
     */
    void userMessageSendbatch(String userId, List<String> uids, List<ImChannel> imChannels);

    /**
     * 发送群成员信息更新cmd消息
     * @param channelId
     */
    void sendChangeUserInfoMessage(String channelId);

    /**
     * 发送红点消除cmd消息
     * @param channelId
     * @param userType
     */
    void sendDeleteUnreadInfoMessage(String channelId, Integer userType);
}
